package com.ojoin.trade.common.utils;

import java.util.concurrent.ThreadFactory;
import java.util.concurrent.atomic.AtomicInteger;

public class NamedThreadFactory implements ThreadFactory {
  private static final AtomicInteger POOL_SEQ = new AtomicInteger(1);

  private final AtomicInteger threadNum = new AtomicInteger(1);

  private final String prefix;

  private final boolean daemon;

  private final ThreadGroup tGroup;

  public NamedThreadFactory() {
    this("pool-" + POOL_SEQ.getAndIncrement(), false);
  }

  public NamedThreadFactory(String prefix) {
    this(prefix, false);
  }

  public NamedThreadFactory(String prefix, boolean daemon) {
    this.prefix = prefix + "-thread-";
    this.daemon = daemon;
    SecurityManager s = System.getSecurityManager();
    tGroup = (s == null) ? Thread.currentThread().getThreadGroup() : s.getThreadGroup();
  }

  public Thread newThread(Runnable runnable) {
    String name = prefix + threadNum.getAndIncrement();
    Thread ret = new Thread(tGroup, runnable, name, 0);
    ret.setDaemon(daemon);
    return ret;
  }

  public ThreadGroup getThreadGroup() {
    return tGroup;
  }
}
